package matrix;

import java.util.ArrayList;
import java.util.List;

public class spiralOrder {
    public static List<Integer> spiralOrder(int[][] matrix) {
        //获取4个顶点，然后循环
        //为简化循环，定义mark数组
        int m=matrix.length,n=matrix[0].length;
        boolean[][] mark = new boolean[m][n];
        List<Integer> list=new ArrayList<>(m*n);
        int circle=0,count=m/2;
        if (m%2!=0) {
            count++;
        }
        for(int i=0;i<count;i++){
            //基于4个顶点做4次循环
            for(int j=circle;j<n-circle;j++){
                if (!mark[circle][j]) {
                    mark[circle][j]=true;
                    list.add(matrix[circle][j]);
                }
            }
            for(int j=circle;j<m-circle;j++){
                if (n-circle-1<0) {
                    //对于{1}{1}{1}会越界
                    return list;
                }
                if (!mark[j][n-circle-1]) {
                    mark[j][n-circle-1]=true;
                    list.add(matrix[j][n-circle-1]);
                }
            }
            for(int j=n-circle-1;j>=0;j--){
                if (!mark[m-circle-1][j]) {
                    mark[m-circle-1][j]=true;
                    list.add(matrix[m-circle-1][j]);
                }
            }
            
            for(int j=m-circle-1;j>=0;j--){
                if (!mark[j][circle]) {
                    mark[j][circle]=true;
                    list.add(matrix[j][circle]);
                }
            }
            circle++;
        }
        return list;

    }
    public static void main(String[] args) {
        // int[][]matrix = new int[][]{{1,2,3}};
        int[][]matrix = new int[][]{{1},{2},{3}};
        // int[][]matrix = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
        // int[][]matrix = new int[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};
        List<Integer> spiralOrder = spiralOrder(matrix);
        for (Integer spiralOrder2 : spiralOrder) {
            System.out.println(spiralOrder2);
        }
    }    
}
